package qiongqi

import (
	"cdam/enum"
)

type Parser interface {
	Parse(data []byte) (*ParseResult, error)
}

type ParseResult struct {
	FlowId      string
	FlowName    string
	FlowVersion int64
	FlowStatus  int
	Nodes       []*NodeResult
	Messages    []*Message
}

type Message struct {
	Id         string
	Name       string
}

type NodeResult struct {
	NodeID                        string            // 节点ID
	NodeName                      string            // 节点名称
	NodeType                      enum.NodeType     // 节点类型
	Routers                       []*RouterResult   // 节点路由
	Properties                    []*PropertyResult // 节点属性
	CandidateUsersExpressions     []string          // 候选人表达式
	AssignExpressions             []string          // 分发人表达式
	CandidateRolesExpressions     []string          // 候选角色表达式
	CandidateGroupsExpressions    []string          // 候选组表达式
	FormResult                    *NodeFormResult   // 节点表单
	CandidatePositionsExpressions []string          // 候选人职位
	Cronexpresion                 string            // cron表达式
	MessageId					  string            // 消息ID
	MessageRef 					  string            // 消息引用
}

// RouterResult 节点路由数据
type RouterResult struct {
	TargetNodeID string // 目标节点ID
	Explain      string // 说明
	Expression   string // 条件表达式
	Code         string
}

// PropertyResult 节点属性
type PropertyResult struct {
	Name  string // 属性名称
	Value string // 属性值
}

// NodeFormResult 节点表单
type NodeFormResult struct {
	ID     string             // 表单ID
	Fields []*FormFieldResult // 表单字段
}

// FormFieldResult 表单字段
type FormFieldResult struct {
	ID           string             // 字段ID
	Type         string             // 字段类型
	Label        string             // 字段标签
	DefaultValue string             // 默认值
	Values       []*FieldOption     // 枚举类型
	Validations  []*FieldValidation // 字段验证
	Properties   []*FieldProperty   // 字段属性
}

// FieldValidation 字段验证
type FieldValidation struct {
	Name   string // 约束名
	Config string // 约束配置
}

// FieldProperty 字段属性
type FieldProperty struct {
	ID    string // 属性ID
	Value string // 属性值
}

// FieldOption 枚举选项
type FieldOption struct {
	ID   string // 选项值ID
	Name string // 选项值名称
}
